package my.design.bridging;

import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

import java.math.BigDecimal;

/**
 * @author zp
 * @version 1.0
 * @description: 桥接模式
 * 简单一点可以理解为 把抽象层和具体实现层面分离
 * 桥接模式的主要作用就是通过将抽象部分与实现部分分离，把多种可匹配的使用进⾏行行组合。说白了了核⼼
 * 实现也就是在A类中含有B类接口，通过构造函数传递B类的实现，这个B类就是设计的桥
 * @date 2022/10/9 18:49
 */
public class PayController {
    private Logger logger = LoggerFactory.getLogger(PayController.class);

    public boolean doPay(String uId, String tradeId, BigDecimal amount,
                         int channelType, int modeType) {
        // 微信⽀支付
        if (1 == channelType) {
            logger.info("模拟微信渠道⽀支付划账开始。 uId： {} tradeId： {} amount： {}", uId, tradeId, amount);
            if (1 == modeType) {
                logger.info("密码⽀支付，⻛风控校验环境安全");
            } else if (2 == modeType) {
                logger.info("⼈人脸⽀支付，⻛风控校验脸部识别");
            } else if (3 == modeType) {
                logger.info("指纹⽀支付，⻛风控校验指纹信息");
            }
        }
        // 支付宝⽀支付
        else if (2 == channelType) {
            logger.info("模拟⽀支付宝渠道⽀支付划账开始。 uId： {} tradeId： {} amount： {}", uId, tradeId, amount);
            if (1 == modeType) {
                logger.info("密码⽀支付，⻛风控校验环境安全");
            } else if (2 == modeType) {
                logger.info("⼈人脸⽀支付，⻛风控校验脸部识别");
            } else if (3 == modeType) {
                logger.info("指纹⽀支付，⻛风控校验指纹信息");
            }
        }
        return true;
    }
}
